iT邦幫忙

2

Groq + Llama 3.1 + SerpApi 免費仔光速打造簡易 RAG 系統

  • 分享至 

  • xImage
  •  

Groq 是一家美國的人工智慧公司,專注於硬體推論加速器的開發,近期以 LPU (Language Process Unit) 聞名。LPU 就跟 CPU 或 GPU 一樣,是一種運算裝置,但 LPU 專注在類似 LLM 這種高度密集運算的模型推論上,推論速度比目前市面上的 GPU 都快上許多。

最近 Meta 釋出了 Llama 3.1 系列模型,將 Context Window 推向 128K,除了既有的 8B 與 70B 兩種規模的模型以外,還釋出了 405B 這個超巨量參數的模型。四千億參數量的模型!如果以 FP16 來跑至少需要 810 GB 的 GPU 記憶體,用 10 張 H100 80 GB 來跑可能都不夠,這甚至還沒算上 KV Cache 等等的額外開銷。

128K Context Window 為 128 * 1024 = 131072 個 Tokens

Groq 光速上架了 Llama 3.1 的模型,雖然目前 405B 的模型也被光速下架,但還是可以來試試看 8B & 70B 模型的效果!

網頁介面

註冊與使用 Groq 目前是免費的,也不用綁信用卡,請各位客家免費仔趕快把握好時機入場,前往 Groq 官網首頁 就能開始體驗。使用之前推薦先設定系統提示 (System Prompt):

Groq System Prompt

筆者習慣使用簡單直白的系統提示,通常只有一句話:

Reply in Traditional Chinese.

可以學 Breeze 模型多加兩句:

You are a helpful assistant. The user you are helping is from Taiwan.

不過有些模型英文的系統提示寫長了,好像就忘記要用繁體中文回覆這件事情了,所以我會多加一句:

You are a helpful assistant. Reply in Traditional Chinese. 使用繁體中文回答。

總而言之,依個人喜好調整就好!

在右上角可以選擇模型,在中間的訊息框輸入文字,或者透過語音辨識送出訊息:

Groq Chat

就算是 70B 的模型,輸出速度高達每秒 250 Tokens,真的相當快!

GroqCloud API

Groq 也有提供 API 可以串接,目前一樣是免費的!點擊首頁底下的 GroqCloud 前往主控台:

GroqCloud

在主控台裡面有個 Playground 可以自由調測想玩的模型與取樣參數,如果要在程式碼裡面串接 API,需要先取得一份 API Key:

GroqCloud API Key

接下來安裝 Groq 的 Python 套件:

pip install groq

使用方法與 OpenAI API 非常相似,首先宣告一個 Client 物件:

from groq import Groq

api_key = "gsk_xxxxxx"
client = Groq(api_key=api_key)

將訊息整理成 list of dict 的形式:

sys_msg = "You are a helpful assistant. Reply in Traditional Chinese. 使用繁體中文回答。"
usr_msg = "什麼是語言模型?"
messages = [
    {"role": "system", "content": sys_msg},
    {"role": "user", "content": usr_msg},
]

API Endpoint 與 OpenAI API 一模一樣:

chat_completion = client.chat.completions.create(
    messages=messages,
    model="llama3-8b-8192",
)

print(chat_completion.choices[0].message.content)
# 語言模型(Language Model)是一種使用 ...

實際執行會發現這速度快的跟鬼一樣,我甚至懶得去寫串流輸出 🤣

可以選擇的模型列表可參考官方文件,除了 Llama 3 & 3.1 以外,還有 Gemma 2 9B 與 Mixtral 8x7B 等模型可以使用。

GroqCloud 也可以透過 OpenAI API 來呼叫,只要把 Client 宣告改成這樣:

from openai import OpenAI

base_url="https://api.groq.com/openai/v1"
client = OpenAI(api_key=api_key, base_url=base_url)

這樣就可以囉!剩下用法一如往常,一些與 OpenAI API 不相容的用法細節可以參考官方文件的描述。

SerpApi

有了 Groq 之後,我們免費仔已經立於不敗之地了,但客家人的實力絕對不僅於此,接下來我們要繼續蹭搜尋引擎 SerpApi 來快速打造一個 RAG 系統。首先前往 SerpApi 官網取得 API Key,一樣免費!但是要綁電話號碼,記得慎選綁定的帳號。

使用方法很簡單,首先安裝 SerpApi 的 Python 套件:

pip install serpapi

宣告一個 Client 物件:

api_key = "xxxxxx"
client = serpapi.Client(api_key=api_key)

query = "颱風 近況"
result = client.search(q=query, engine="google", location="Taiwan", hl="zh-tw", gl="tw")
print(result.as_dict())

回傳是一個 JSON 物件,內容包含的資訊相當多,可以先簡單看 organic_results 的結果就好。

Simple RAG

結合 Groq 與 SerpApi 來快速打造一個簡單的 RAG 系統,首先請 LLM 將使用者的查詢解析成搜尋引擎用的關鍵字:

sys_inst = (
    "Parse the user query into a JSON list of keyword strings, "
    "which is suitable for the Google search engine. "
    "For example, query: how to learn python? "
    'Output: {"keywords": ["python", "learn"]}'
)

在系統提示裡面,要求語言模型將使用者查詢解析成 JSON 格式的關鍵字列表,接下來透過 JSON Mode 來取得結構化輸出,這裡以「颱風近況如何」為例:

import json
from groq import Groq

api_key = "gsk_xxxxxx"
groq_client = Groq(api_key=api_key)

user_query = "颱風近況如何?"
messages = [
    {"role": "system", "content": sys_inst},
    {"role": "user", "content": user_query},
]

completion = groq_client.chat.completions.create(
    model="llama-3.1-70b-versatile",
    messages=messages,
    response_format={"type": "json_object"},
)
result = json.loads(completion.choices[0].message.content)

q = " ".join(result["keywords"])
print(f"query: {q}")
# query: 颱風 近況

得到的關鍵字為「颱風」跟「近況」,然後透過 SerpApi 取得搜尋結果,並將 organic_results 底下的 snippet 取出來,當作我們要提供給語言模型的資訊:

import serpapi

serp_client = serpapi.Client(api_key="xxx")
result = serp_client.search(q=q, engine="google", location="Taiwan", hl="zh-tw", gl="tw")
snippets = [item["snippet"] for item in result["organic_results"]]

最後將所有資訊整理起來:

sys_msg = "You are a helpful assistant. Reply in Traditional Chinese."
usr_msg = "\n\n".join(snippets)
usr_msg += f"\n\n請根據以上資訊,詳細回答使用者的問題:{user_query}"
messages = [
    {"role": "system", "content": sys_msg},
    {"role": "user", "content": usr_msg},
]

把完整的訊息丟進 Llama 3.1 70B 來取得最終的回答:

chat_completion = groq_client.chat.completions.create(
    messages=messages,
    model="llama-3.1-70b-versatile",
)

print(chat_completion.choices[0].message.content)

模型的回答如下:

根據最新資料顯示,第 3 號颱風已增強為強烈颱風,目前中心在宜蘭東南方海面,向北轉西北西移動,其暴風圈正壟罩臺灣,對臺灣各地及澎湖、馬祖、金門等地區造成影響。

這樣就完成了一份相當簡單的 RAG 系統囉!各位颱風天注意安全~

結論

其實這些免費 API 的使用額度都滿低的,像 Groq 對 Token 使用量的限制就很高,不太能做 Long Context 的 RAG,而 SerpApi 的免費查詢次數也不是很多。但如果只是想要體驗一下 NLP 應用開發的話,就是個相當快速又方便的選擇!

宣傳

《LLM 大型語言模型的絕世祕笈:27 路獨步劍法,帶你闖蕩生成式 AI 的五湖四海》改編自我參加 2023 年第 15 屆 iThome 鐵人賽 AI & Data 組冠軍系列文章《LLM 學習筆記》,介紹了許多在建立 LLM 相關應用時會使用到的技術。本書預計於 8/9 上市,現在可以在天瓏網路書局上預購,連結請參考留言區,還請大家多多支持!

博碩 | 天瓏 | 博客來 | 鐵人賽系列原文

參考


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言